/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import ClasesBase.Casillero;
import ClasesBase.Ferrocarril;
import ClasesBase.Propiedad;
import ClasesBase.ServicioPublico;
import Extras.HashTable;
import Extras.Mensajes;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;

/**
 *
 * @author Francisco
 */
public class CasilleroDAO {

    private ResultSet rs;
    private Connection conexion;
    private String consulta;
    private Casillero casillero;
    private PreparedStatement pstGetCasilleros;

    public HashTable getCasilleros() {
        HashTable htCasilleros = new HashTable();
        int idCasillero, precio, alquiler, alquilerUnaCasa,
                alquilerDosCasas, alquilerTresCasas, alquilerCuatroCasas,
                alquilerHotel, valorDeCasa, hipoteca, idPropiedad, idServicio, idFerrocarril, idHno1, idHno2;
        String nombre, tipo, color;
        consulta = "SELECT * FROM \"casillero\" AS \"c\" LEFT OUTER JOIN \"propiedad\" AS \"p\" ON \"c\".\"idPropiedad\" = \"p\".\"idPropiedad\""
                + "LEFT JOIN \"ferrocarril\" AS \"f\" ON \"f\".\"idFerrocarril\" = \"c\".\"idFerrocarril\""
                + "LEFT JOIN \"servicio\" AS \"s\" ON \"s\".\"idServicio\" = \"c\".\"idServicio\"";
        try {
            conexion = ConexionDAO.conectarBD();
            pstGetCasilleros = conexion.prepareStatement(consulta);
            rs = pstGetCasilleros.executeQuery();
            while (rs.next()) {
                idCasillero = rs.getInt("idCasillero");
                nombre = rs.getString("nombre");
                tipo = rs.getString("tipo");
                switch (tipo) {
                    case "Propiedad":
                        idPropiedad = rs.getInt("idPropiedad");
                        color = rs.getString("color");
                        precio = rs.getInt("precioPropiedad");
                        alquiler = rs.getInt("alquilerPropiedad");
                        alquilerUnaCasa = rs.getInt("alquilerUnaCasa");
                        alquilerDosCasas = rs.getInt("alquilerDosCasas");
                        alquilerTresCasas = rs.getInt("alquilerTresCasas");
                        alquilerCuatroCasas = rs.getInt("alquilerCuatroCasas");
                        alquilerHotel = rs.getInt("alquilerHotel");
                        valorDeCasa = rs.getInt("valorDeCasa");
                        hipoteca = rs.getInt("hipotecaPropiedad");
                        idHno1 = rs.getInt("idHno1");
                        idHno2 = rs.getInt("idHno2");
                        Propiedad prop = new Propiedad(idCasillero, tipo, nombre, idPropiedad, color, alquiler, alquilerUnaCasa, alquilerDosCasas, alquilerTresCasas, alquilerCuatroCasas, alquilerHotel, hipoteca, valorDeCasa, precio);
                        prop.addHno(idHno1);
                        prop.addHno(idHno2);
                        casillero = prop;
                        if (!htCasilleros.put(casillero)) {
                            Mensajes.mostrarError("Surgio un problema en la importacion de datos. Insercion en Hash.");
                        }
                        break;
                    case "Servicio":
                        idServicio = rs.getInt("idServicio");
                        hipoteca = rs.getInt("hipotecaServicio");
                        precio = rs.getInt("precioServicio");
                        casillero = new ServicioPublico(idCasillero, tipo, nombre, idServicio, hipoteca, precio);
                        if (!htCasilleros.put(casillero)) {
                            Mensajes.mostrarError("Surgio un problema en la importacion de datos. Insercion en Hash.");
                        }
                        break;
                    case "Ferrocarril":
                        idFerrocarril = rs.getInt("idFerrocarril");
                        alquiler = rs.getInt("alquilerFerrocarril");
                        precio = rs.getInt("precioFerrocarril");
                        hipoteca = rs.getInt("hipotecaFerrocarril");
                        casillero = new Ferrocarril(idCasillero, tipo, nombre, idFerrocarril, alquiler, precio, hipoteca);
                        if (!htCasilleros.put(casillero)) {
                            Mensajes.mostrarError("Surgio un problema en la importacion de datos. Insercion en Hash.");
                        }
                        break;
                    case "Extra":
                        casillero = new Casillero(idCasillero, tipo, nombre);
                        if (!htCasilleros.put(casillero)) {
                            Mensajes.mostrarError("Surgio un problema en la importacion de datos. Insercion en Hash.");
                        }
                        break;
                }
            }
            pstGetCasilleros.close();
        } catch (SQLException e) {
            Mensajes.mostrarError("No se pudo consultar la base de datos.");
            e.printStackTrace();
        } finally {
            ConexionDAO.desconectarBD(conexion);
        }
        return htCasilleros;
    }
}
